package com.tao.single_;

/**
 * 演示懒汉式的单例模式
 */
public class SingleTon02 {
    public static void main(String[] args) {
        Cat instance = Cat.getInstance();
        System.out.println(instance);
        //再次调用
        Cat instance2 = Cat.getInstance();
        System.out.println(instance2);

        System.out.println(instance == instance2);
    }
}

//希望在程序运行过程中只能创建一个Cat对象
class Cat{
    private String name;
    private static Cat cat;//这里没有new，所以构造器不会被调用
    //步骤
    //1.构造器私有化
    //2.定义一个static静态属性对象
    //3.提供一个public的static方法，可以返回一个Cat对象

    private Cat(String name) {
        System.out.println("构造器被调用");
        this.name = name;
    }

    //懒汉式：只有用户调用getInstance方法时，才会创建cat对象,再次调用时，会返回上次创建的cat对象，从而保证了单例模式
    public static Cat getInstance(){
        if(cat == null){
            cat = new Cat("小白");
        }
        return cat;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                '}';
    }
}